package br.unirio.octopus.servicos.implementacao;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import br.unirio.octopus.dados.RepositorioDeJogo;
import br.unirio.octopus.dominio.Jogo;
import br.unirio.octopus.excecao.ExcecaoDaAplicacao;
import br.unirio.octopus.servicos.IServicoDeJogo;

@Service
public class ServicoDeJogo implements IServicoDeJogo{

	@Autowired
	private RepositorioDeJogo repositorioDeJogos;

		
	public List<Jogo> obterTodos()
	{
		return repositorioDeJogos.obterTodos();
	}

	public List<Jogo> obterTodosOrdenadosPorData(){
		return repositorioDeJogos.obterTodosOrdenadosPorData();
	}

	@Override
	public Jogo obterJogo(Integer numeroDoJogo)
	{
		return repositorioDeJogos.obterPorId(numeroDoJogo);
	}

	@Transactional
	@Override
	public void alterar(Jogo jogo) throws ExcecaoDaAplicacao
	{
		if(jogo.getPais1().getCodigoLongo().equals("BRA")){
			if(jogo.getGolsPais1()<jogo.getGolsPais2()){
				throw new ExcecaoDaAplicacao("jogo.cadastroResultado.brasilPerde");
			}
		}else if(jogo.getPais2().getCodigoLongo().equals("BRA")){
			if(jogo.getGolsPais2()<jogo.getGolsPais1()){
				throw new ExcecaoDaAplicacao("jogo.cadastroResultado.brasilPerde");
			}
		}
		if(!jogo.getFase().getNome().equals("Grupos")){
			if(jogo.getGolsPais1().equals(jogo.getGolsPais2())){
				throw new ExcecaoDaAplicacao("jogo.cadastroResultado.empateMataMata");
			}
		}
		repositorioDeJogos.alterar(jogo);		
	}
	
	public List<Jogo> obterTodosJogosAteFaseAtual(){
		return repositorioDeJogos.obterTodosJogosAteFaseAtual();
	}

}
